/**
 *	@file	ev_safari.c
 *	@brief	サファリ　常駐イベント
 *	@author	Miyuki Iwasawa
 *	@date	08.10.29
 */
#include "common.h"
#include "fieldsys.h"

#include "system/snd_tool.h"
#include "system/wordset.h"

#include "script.h"
#include "scrcmd_def.h"
#include "field/field.h"
#include "field/eventflag.h"
#include "field/evwkdef.h"
#include "sysflag.h"
#include "syswork.h"
#include "ev_mapchange.h"
#include "fld_bgm.h"

#include "ev_trainer.h"				//EvTrainer
#include "field_encount.h"			//DebugFieldEncount
#include "field_battle.h"			//BattleParam_IsWinResult
#include "field_subproc.h"
#include "map3d_object.h"
#include "fielddata/script/savework.h"	//LOCALWORK定義参照用

#include "application/safari_l.h"
#include "fld_safari.h"
#include "scr_safari.h"
#include "ev_safari.h"

typedef struct _LAYOUT_EVENT_WORK{
	int	seq;
	u16* ret_wk;
	SAFARI_LTPARAM* app_wk;
}LAYOUT_EVENT_WORK;

static BOOL GMEVENT_SafariObjLayout(GMEVENT_CONTROL * event);


//------------------------------------------------------------------
/**
 *	@brief	サファリオブジェ配置ツール呼び出しイベントセット
 *
 * @param	event		イベント制御ワークへのポインタ
 * @param	ret_work	結果を格納するイベントワークアドレス
 *
 * フィールドプロセス終了→ツール呼び出し→フィールドプロセス再開を行う
 */
//------------------------------------------------------------------
void EventCmd_SafariObjLayout(GMEVENT_CONTROL * event,u16* ret_work)
{
	FIELDSYS_WORK * fsys = FieldEvent_GetFieldSysWork(event);
	LAYOUT_EVENT_WORK * wk = sys_AllocMemoryLo(HEAPID_WORLD, sizeof(LAYOUT_EVENT_WORK));

	MI_CpuClear8(wk,sizeof(LAYOUT_EVENT_WORK));
	wk->seq		= 0;
	wk->ret_wk	= ret_work;

	FieldEvent_Call( event, GMEVENT_SafariObjLayout, wk );
}

/**
 *	@brief	サファリオブジェレイアウト呼び出しイベント
 */
static BOOL GMEVENT_SafariObjLayout(GMEVENT_CONTROL * event)
{
	FIELDSYS_WORK * fsys = FieldEvent_GetFieldSysWork(event);
	LAYOUT_EVENT_WORK *wk = FieldEvent_GetSpecialWork(event);

	switch (wk->seq) {
	case 0:
		wk->app_wk = FieldSafariObjLayout_SetProc(fsys);
		wk->seq ++;
		break;
	case 1:
		if (FieldEvent_Cmd_WaitSubProcEnd(fsys)) {
			break;
		}
		//結果を取得
		*wk->ret_wk = wk->app_wk->ret_value;
		sys_FreeMemoryEz(wk->app_wk);
		wk->seq ++;
		break;
	case 2:
		EventCmd_StartFieldMap(event);
		wk->seq ++;
		break;
	case 3:
		sys_FreeMemoryEz(wk);
		return TRUE;
	}
	return FALSE;
}
